package com.example.base_model.dialog

import android.app.Dialog
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import com.example.base_model.R
import com.example.base_model.databinding.DialogDefaultLoadingBinding

/**
 * @Author jiangKunKun
 * @CreateDate 2025/7/23
 * @Description 默认的加载中对话框。这是一个全屏、模态的对话框，用于在执行耗时操作时阻止用户交互。
 * @SpittingGrooves
 */
class DefaultLoadingDialog(context: Context) : Dialog(context) {
    /**
     * 视图绑定对象，用于访问布局文件中的视图。
     */
    private val binding: DialogDefaultLoadingBinding

    init {
        // 1. 加载自定义布局
        val view = LayoutInflater.from(context).inflate(R.layout.dialog_default_loading, null)
        // 2. 绑定视图
        binding = DialogDefaultLoadingBinding.bind(view)
        // 3. 将布局设置为对话框的内容视图
        setContentView(view)

        // 4. 配置对话框窗口属性
        val window = this.window
        window?.let {
            // 设置对话框宽度和高度以匹配父容器（全屏）
            it.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
            // 设置背景为透明，以显示自定义的圆角背景
            it.setBackgroundDrawableResource(android.R.color.transparent)
            // 设置背景变暗的程度，0.0f（完全透明）到 1.0f（完全不透明）
            it.setDimAmount(0.5f)
        }

        // 5. 设置对话框为不可取消，以强制用户等待操作完成
        // 禁止通过返回键关闭对话框
        setCancelable(false)
        // 禁止通过点击对话框外部区域关闭对话框
        setCanceledOnTouchOutside(false)
    }

    /**
     * 设置并更新加载提示文本。
     *
     * @param msg 要显示的提示消息。
     */
    fun setMessage(msg: String) {
        binding.tvLoadingMsg.text = msg
    }
}
